#ifndef CPPOLYNOM2D_H
#define CPPOLYNOM2D_H

#include <TObject.h>
class CpPolynom2D : public TObject {
public:
   CpPolynom2D();
   ~CpPolynom2D();

   static Double_t Degree0(Double_t *x, Double_t *par);
   static Double_t Degree1(Double_t *x, Double_t *par);
   static Double_t Degree2(Double_t *x, Double_t *par);
   static Double_t Degree3(Double_t *x, Double_t *par);
   static Double_t Degree4(Double_t *x, Double_t *par);
   static Double_t Degree5(Double_t *x, Double_t *par);
   static Double_t Degree6(Double_t *x, Double_t *par);
   static Double_t Degree7(Double_t *x, Double_t *par);
   static Double_t Degree8(Double_t *x, Double_t *par);
   static Double_t Degree9(Double_t *x, Double_t *par);
   static Double_t Degree10(Double_t *x, Double_t *par);
   
   static Double_t DerivateXDegree0(Double_t *x, Double_t *par);
   static Double_t DerivateXDegree1(Double_t *x, Double_t *par);
   static Double_t DerivateXDegree2(Double_t *x, Double_t *par);
   static Double_t DerivateXDegree3(Double_t *x, Double_t *par);
   static Double_t DerivateXDegree4(Double_t *x, Double_t *par);
   static Double_t DerivateXDegree5(Double_t *x, Double_t *par);
   static Double_t DerivateXDegree6(Double_t *x, Double_t *par);
   static Double_t DerivateXDegree7(Double_t *x, Double_t *par);
   static Double_t DerivateXDegree8(Double_t *x, Double_t *par);
   static Double_t DerivateXDegree9(Double_t *x, Double_t *par);
   static Double_t DerivateXDegree10(Double_t *x, Double_t *par);

   static Double_t DerivateYDegree0(Double_t *x, Double_t *par);
   static Double_t DerivateYDegree1(Double_t *x, Double_t *par);
   static Double_t DerivateYDegree2(Double_t *x, Double_t *par);
   static Double_t DerivateYDegree3(Double_t *x, Double_t *par);
   static Double_t DerivateYDegree4(Double_t *x, Double_t *par);
   static Double_t DerivateYDegree5(Double_t *x, Double_t *par);
   static Double_t DerivateYDegree6(Double_t *x, Double_t *par);
   static Double_t DerivateYDegree7(Double_t *x, Double_t *par);
   static Double_t DerivateYDegree8(Double_t *x, Double_t *par);
   static Double_t DerivateYDegree9(Double_t *x, Double_t *par);
   static Double_t DerivateYDegree10(Double_t *x, Double_t *par);
   
   static Double_t Derivate2XDegree0(Double_t *x, Double_t *par);
   static Double_t Derivate2XDegree1(Double_t *x, Double_t *par);
   static Double_t Derivate2XDegree2(Double_t *x, Double_t *par);
   static Double_t Derivate2XDegree3(Double_t *x, Double_t *par);
   static Double_t Derivate2XDegree4(Double_t *x, Double_t *par);
   static Double_t Derivate2XDegree5(Double_t *x, Double_t *par);
   static Double_t Derivate2XDegree6(Double_t *x, Double_t *par);
   static Double_t Derivate2XDegree7(Double_t *x, Double_t *par);
   static Double_t Derivate2XDegree8(Double_t *x, Double_t *par);
   static Double_t Derivate2XDegree9(Double_t *x, Double_t *par);
   static Double_t Derivate2XDegree10(Double_t *x, Double_t *par);

   static Double_t Derivate2YDegree0(Double_t *x, Double_t *par);
   static Double_t Derivate2YDegree1(Double_t *x, Double_t *par);
   static Double_t Derivate2YDegree2(Double_t *x, Double_t *par);
   static Double_t Derivate2YDegree3(Double_t *x, Double_t *par);
   static Double_t Derivate2YDegree4(Double_t *x, Double_t *par);
   static Double_t Derivate2YDegree5(Double_t *x, Double_t *par);
   static Double_t Derivate2YDegree6(Double_t *x, Double_t *par);
   static Double_t Derivate2YDegree7(Double_t *x, Double_t *par);
   static Double_t Derivate2YDegree8(Double_t *x, Double_t *par);
   static Double_t Derivate2YDegree9(Double_t *x, Double_t *par);
   static Double_t Derivate2YDegree10(Double_t *x, Double_t *par);
   static Int_t GetNumberOfParameters(Int_t grade);

private:

   ClassDef(CpPolynom2D, 1);
};

#endif
